package cn.xscrum.vtsp.service.impl;

import java.util.List;

import cn.xscrum.common.exception.BusinessException;
import cn.xscrum.common.utils.DateUtils;
import cn.xscrum.common.utils.StringUtils;
import cn.xscrum.vtsp.domain.VtspActivity;
import cn.xscrum.vtsp.service.IVtspMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.xscrum.vtsp.mapper.VtspRecipientMapper;
import cn.xscrum.vtsp.domain.VtspRecipient;
import cn.xscrum.vtsp.service.IVtspRecipientService;
import cn.xscrum.common.core.text.Convert;

/**
 * 服务对象信息Service业务层处理
 * 
 * @author xscrum
 * @date 2021-10-01
 */
@Service
public class VtspRecipientServiceImpl implements IVtspRecipientService 
{
    @Autowired
    private VtspRecipientMapper vtspRecipientMapper;

    @Autowired
    private IVtspMessageService vtspMessageService;

    /**
	 * 查询服务对象信息
     * 
     * @param recipientId 服务对象信息ID
     * @return 服务对象信息
     */
    @Override
    public VtspRecipient selectVtspRecipientById(Long recipientId)
    {
        return vtspRecipientMapper.selectVtspRecipientById(recipientId);
    }

    /**
	 * 查询服务对象信息列表
     * 
     * @param vtspRecipient 服务对象信息
     * @return 服务对象信息
     */
    @Override
    public List<VtspRecipient> selectVtspRecipientList(VtspRecipient vtspRecipient)
    {
        return vtspRecipientMapper.selectVtspRecipientList(vtspRecipient);
    }

    /**
	 * 新增服务对象信息
     * 
     * @param vtspRecipient 服务对象信息
     * @return 结果
     */
    @Override
    public int insertVtspRecipient(VtspRecipient vtspRecipient)
    {
        vtspRecipient.setCreateTime(DateUtils.getNowDate());
        //新增服务对象
        int row = vtspRecipientMapper.insertVtspRecipient(vtspRecipient);
        //如果新增的服务对象是启用的，发送可视化消息
        if (vtspRecipient.getRecipientState() == 1){
            //对新增服务对象执行发送消息到可视化工具    状态6，userId-页面申请的连接id（对服务对象进行更新）
            vtspMessageService.sendMessage(6,null,7L);
        }
        return row;
    }

    /**
	 * 修改服务对象信息
     * 
     * @param vtspRecipient 服务对象信息
     * @return 结果
     */
    @Override
    public int updateVtspRecipient(VtspRecipient vtspRecipient)
    {
        vtspRecipient.setUpdateTime(DateUtils.getNowDate());
        //查询原服务对象的状态
        VtspRecipient recipient = vtspRecipientMapper.selectVtspRecipientById(vtspRecipient.getRecipientId());
        //修改服务对象
        int row = vtspRecipientMapper.updateVtspRecipient(vtspRecipient);
        //如果对服务对象的状态修改了，那么发送可视化消息
        if (!recipient.getRecipientState().equals(vtspRecipient.getRecipientState())){
            //对修改服务对象执行发送消息到可视化工具    状态6，userId-页面申请的连接id（对服务对象进行更新）
            vtspMessageService.sendMessage(6,null,7L);
        }
        return row;
    }

    /**
	 * 删除服务对象信息对象
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    @Override
    public int deleteVtspRecipientByIds(String ids)
    {
        return vtspRecipientMapper.deleteVtspRecipientByIds(Convert.toStrArray(ids));
    }

    /**
	 * 删除服务对象信息信息
     * 
     * @param recipientId 服务对象信息ID
     * @return 结果
     */
    @Override
    public int deleteVtspRecipientById(Long recipientId)
    {
        return vtspRecipientMapper.deleteVtspRecipientById(recipientId);
    }

    @Override
    public String importList(List<VtspRecipient> recipientList)
    {
        //判空
        if (StringUtils.isNull(recipientList) || recipientList.size() == 0)
        {
            throw new BusinessException("导入数据不能为空！");
        }
        int successNum = 0;     //导入成功数量
        int failureNum = 0;     //导入失败数量
        StringBuilder successMsg = new StringBuilder();     //导入成功响应
        StringBuilder failureMsg = new StringBuilder();     //导入失败响应

        //对导入的数据进行循环判断
        for (VtspRecipient vtspRecipient : recipientList)
        {
            //导入成功
            try
            {
                //插入
                this.insertVtspRecipient(vtspRecipient);
                successNum++;
                //导入成功提示
                successMsg.append("<br/>" + successNum + "活动信息导入成功！");
            }
            //导入失败
            catch (Exception e)
            {
                failureNum++;
                String msg = "<br/>" + failureNum + "活动信息导入失败！";
                failureMsg.append(msg + e.getMessage());
            }
        }
        //结果反馈
        if (failureNum > 0)
        {
            failureMsg.insert(0, "很抱歉，导入失败！共 " + failureNum + " 条数据格式不正确，错误如下：");
            throw new BusinessException(failureMsg.toString());
        }
        else
        {
            successMsg.insert(0, "数据已全部导入成功！共 " + successNum + " 条，数据如下：");
            //导入服务对象发起点，对导入服务对象执行发送消息到可视化工具    状态6，userId-页面申请的连接id（对活动对象及其他进行更新）
            vtspMessageService.sendMessage(6,null,7L);
        }
        return successMsg.toString();
    }
}
